Software applications (hereinafter “applications”) generally consist of source code (e.g., a set of human-readable programming instructions) that is capable of being compiled into machine code (e.g., binary machine code) and executed by an operating system. The source code may be either managed or unmanaged source code depending on which programming language is used to create the application. Unmanaged source code is compiled directly into machine code prior to runtime, and stored in a file for subsequent execution by the operating system. Because unmanaged source code is compiled into machine code prior to runtime, it must generally include operations for managing resources (e.g. memory) of the operation system during execution of the application.
In contrast, managed source code is compiled during runtime of the application by a managed runtime environment (MRTE), which is a type of virtual machine that is installed in the operating system for the purpose of running a managed application. In particular, applications that include managed source code, hereinafter referred to as “managed runtime applications”, such as java applications are first compiled into bytecode, which is executed by the MRTE. During execution, the bytecode is interpreted by an interpreter of the MRTE and the frequently interpreted path is then converted into native instructions by a just-in-time (JIT) compiler of the MRTE. The resulting native instructions can then be executed directly on the machine.
Notably, the MRTE manages resources (e.g., memory) of the operating system when interpreting the bytecode during runtime. As a result, managed runtime applications are generally not required to include system-specific instructions for managing operating system resources, which makes it easier for developers to develop applications that are universally compliant across different operating systems on different hardware. However, executing managed runtime applications in the MRTE can be both memory intensive and time consuming. As such, techniques for reducing the memory and time required to execute managed runtime applications in the MRTE are desired.